home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / vbdatabs / bucketb.h < prev    next >
C/C++ Source or Header  |  1999-03-14  |  4KB  |  106 lines

  1. // ------------------------------- //
  2. // -------- Start of File -------- //
  3. // ------------------------------- //
  4. // ----------------------------------------------------------- //
  5. // C++ Header File Name: bucketb.h 
  6. // Compiler Used: MSVC40, DJGPP 2.7.2.1, GCC 2.7.2.1, HP CPP 10.24
  7. // Produced By: Doug Gaer   
  8. // File Creation Date: 02/07/1997  
  9. // Date Last Modified: 03/15/1999
  10. // Copyright (c) 1997 Douglas M. Gaer
  11. // ----------------------------------------------------------- // 
  12. // ---------- Include File Description and Details  ---------- // 
  13. // ----------------------------------------------------------- // 
  14. /*
  15. The VBD C++ classes are copyright (c) 1997, by Douglas M. Gaer.
  16. All those who put this code or its derivatives in a commercial
  17. product MUST mention this copyright in their documentation for
  18. users of the products in which this code or its derivative
  19. classes are used. Otherwise, you have the freedom to redistribute
  20. verbatim copies of this source code, adapt it to your specific
  21. needs, or improve the code and release your improvements to the
  22. public provided that the modified files carry prominent notices
  23. stating that you changed the files and the date of any change.
  24.  
  25. THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.
  26. THE ENTIRE RISK OF THE QUALITY AND PERFORMANCE OF THIS SOFTWARE
  27. IS WITH YOU. SHOULD ANY ELEMENT OF THIS SOFTWARE PROVE DEFECTIVE,
  28. YOU WILL ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR
  29. CORRECTION.
  30.  
  31. The Bucketb class is implemented independently of the data
  32. stored to provide the maximum code sharing. The cache bucket
  33. class is derived from the Bucketb class, creating a family of
  34. classes specific to the data type stored. Both of the cache
  35. bucket classes are used to keep addresses and memory buffers
  36. paired together, to prevent a file-based object's address from
  37. being associated with the wrong memory buffer.
  38.  
  39. Changes:
  40. ================================================================
  41. 10/08/1998: Added another version of the SetDirty() function. The
  42. void SetDirty(VBDFile &f) version is used to write the bucket data
  43. immediately to disk instead of waiting for the cache to fill up.
  44. This effectly creates a write-through cache, used in cases where
  45. the delay in writing the bucket data to disk is unacceptable.
  46. Added by: Doug Gaer
  47. */
  48. // ----------------------------------------------------------- //   
  49. #ifndef __BUCKETB_HPP__
  50. #define __BUCKETB_HPP__
  51.  
  52. #include "int32.h"
  53.  
  54. class Cacheb; class CachePtrb; class VBDFile; // Forward declarations
  55.  
  56. // This typedef is defined in the vbdfile.h file
  57. #ifndef FAU
  58. typedef INT32 FAU; // (F)ile (A)ddress (U)nit, physical file address type
  59. #endif
  60.  
  61. // Data independent cache (B)ucket (b)ase class
  62. class Bucketb
  63. {
  64. public:
  65.   Bucketb() { } // Other classes initialize buckets
  66.  
  67. public:
  68.   void Lock() { ++refcnt; }
  69.   void Unlock() { --refcnt; }
  70.   int IsLocked() { return refcnt; }
  71.   void SetDirty() { Dirty = 1; }
  72.   void SetDirty(VBDFile &f) { Dirty = 1; if(Address) Store(f); }
  73.   int IsNull() { return Address == 0; }
  74.   void Release() { refcnt = 0; }
  75.   void Flush(VBDFile &f) { if(Address && Dirty) Store(f); }
  76.   virtual void Fetch(VBDFile &f) = 0; // Depends on bucket data
  77.   virtual void Store(VBDFile &f) = 0; // Depends on bucket data
  78.  
  79. public: // Functions used for testing and statistics
  80.   FAU GetAddress() { return Address; }
  81.   int GetRefCnt() { return refcnt; }
  82.   char GetDirty() { return Dirty; }
  83.   Bucketb *GetPrior() { return Prior; }
  84.   Bucketb *GetNext() { return Next; }
  85.   
  86. public:
  87.   friend class Cacheb;
  88.   friend class CachePtrb;
  89.  
  90. protected:
  91.   void MakeNull() { Address = 0; refcnt = 0; Dirty = 0; }
  92.  
  93. protected:
  94.   FAU Address;    // Location of bucket's data in the file
  95.   int refcnt;     // How many cache pointers pointing to this bucket
  96.   char Dirty;     // True when data doesn't match what's in file
  97.   Bucketb *Prior; // Pointer to adjacent buckets in the cache
  98.   Bucketb *Next;  // Most recently acquired bucket
  99. };
  100.  
  101. #endif // __BUCKETB_HPP__
  102. // ----------------------------------------------------------- // 
  103. // ------------------------------- //
  104. // --------- End of File --------- //
  105. // ------------------------------- //
  106.